import org.ia.efactura.*;

public class borrame {

	public static void main(String[] args) {
		//Objeto Comprobante
		Comprobante comprobante = new Comprobante();
		comprobante.setAttribute("fecha", "2010-03-27T12:00:00");
		comprobante.setAttribute("folio", "12");
		comprobante.setAttribute("formaDePago", "efectivo");
		comprobante.setAttribute("noAprobacion", "2");
		comprobante.setAttribute("noCertificado", "1");
		comprobante.setAttribute("serie", "a");
		comprobante.setAttribute("version", "1.0");
		
		//Emisor
		Emisor emisor = new Emisor();
		emisor.setAttribute("nombre", "juanperez");
		emisor.setAttribute("rfc", "juan02020211");
		
		Domicilio dom = new Domicilio();
		dom.setAttribute("calle", "mi calle1");
		dom.setAttribute("codigoPostal", "54321");
		dom.setAttribute("colonia", "mi colonia1");
		dom.setAttribute("estado", "mi estado1");
		dom.setAttribute("localidad", "mi localidad1");
		dom.setAttribute("municipio", "mi municipio1");
		dom.setAttribute("noExterior", "321");
		dom.setAttribute("noInterior", "4");
		dom.setAttribute("pais", "Mexico");
		dom.setAttribute("referencia", "ninguna");
		emisor.setDomicilio(dom);
		emisor.setExpedido(dom);
		comprobante.setEmisor(emisor);
		
		//RECEPTOR
		Receptor receptor = new Receptor();
		receptor.setAttribute("nombre", "joseperez");
		receptor.setAttribute("rfc", "juan02020211");
		
		Domicilio dom2 = new Domicilio();
		dom2.setAttribute("calle", "mi calle");
		dom2.setAttribute("codigoPostal", "12345");
		dom2.setAttribute("colonia", "mi colonia");
		dom2.setAttribute("estado", "mi estado");
		dom2.setAttribute("localidad", "mi localidad");
		dom2.setAttribute("municipio", "mi municipio");
		dom2.setAttribute("noExterior", "123");
		dom2.setAttribute("noInterior", "4");
		dom2.setAttribute("pais", "Mexico");
		dom2.setAttribute("referencia", "otra ref");
		receptor.setDomicilio(dom2);
		comprobante.setReceptor(receptor);
		
		//CONCEPTOS
		Concepto concepto1 = new Concepto();
		concepto1.setAttribute("cantidad", "1.0");
		concepto1.setAttribute("descripcion", "ninguna");
		concepto1.setAttribute("importe", "100.00");
		concepto1.setAttribute("unidad", "2.0");
		concepto1.setAttribute("valorUnitario", "100.00");
		InformacionAduanera infoad = new InformacionAduanera();
		infoad.setAttribute("aduana", "la_aduana");
		infoad.setAttribute("fecha", "2001-01-01");
		infoad.setAttribute("numero", "1");
		concepto1.setInfoaduanera(infoad);
		comprobante.addConcepto(concepto1);
		
		//RETENCIONES
		Retencion retencion1 = new Retencion();
		retencion1.setAttribute("importe", "10.00");
		retencion1.setAttribute("impuesto", "ISR");
		comprobante.addRetencion(retencion1);
		
		//TRASLADO
		Traslado traslado1 = new Traslado();
		traslado1.setAttribute("importe", "16.00");
		traslado1.setAttribute("impuesto", "IVA");
		comprobante.addTraslados(traslado1);
		
		//Define los objetos XmlHandler y Encoder
		XmlHandler xmlobject = new XmlHandler();
		Encoder myencoder = new Encoder();
		
		//Convierte el objeto Comprobante a una cadena Xml
		String comprobanteString = xmlobject.ObjectToXMLString(comprobante);
		//System.out.println(comprobanteString);
		
		//Genera la cadena Original
		String cadenaO = xmlobject.getCadenaOriginal(comprobanteString, "SATFiles\\cadenaOriginal.xsl");
		//System.out.println(cadenaO);
		
		//Sello Digital
		String cadenaEnc = myencoder.getSelloDigital(cadenaO, "a0123456789", "SATFiles\\aaa010101aaa_CSD_01.key");
		//Certificado
		String certificado = myencoder.getCertificado("SATFiles\\aaa010101aaa_CSD_01.cer");
		
		//Agrega el certificado y cadena original a los atributos del Comprobante.
		comprobante.setAttribute("sello", cadenaEnc);
		comprobante.setAttribute("certificado", certificado);
		
		//Genera de nuevo la cadena Xml y lo guarda en la ruta especificada. Esta vez, la cadena Xml contiene el certificado y sello digital.
		String comprobanteString2 = xmlobject.ObjectToXMLString(comprobante);
		xmlobject.ObjectToXMLFile(comprobante, "SATFiles\\testme.xml");
		
		//Valida el archivo Xml que se genero. Si es valido regresa TRUE, en caso contrario, imprime los errores.
		System.out.println("es valido? " + xmlobject.validateXml("SATFiles\\testme.xml", "SATFiles\\comprobante.xsd"));
		
		
		System.out.println("TERMINO!");
		
		
		
		
	}
}
